查看原文
其他

Stata数据处理:将字符变量编码为数值变量-encoder

连享会 连享会 2022-06-23

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 效率分析专题

作者:李依 (华中科技大学)
邮箱:ellie@hust.edu.cn


目录

  • 1. encode 命令

  • 2. sencode 命令

  • 3. encoder 命令和 encoderall 命令

  • 4. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

1. encode 命令

encode 命令可以将字符型变量转换为数值型变量。具体地,将字符变量的不同取值,按照字母排列顺序分别映射到数值 1, 2,...,并为生成的数字变量添加值标签。

encode 命令语法:

encode varname [if] [in] , generate(newvar) [label(name) noextend]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 (newvar)
  • label(name):按照变量值标签 name 中的 “字符串-数值” 的对应关系来转换 (默认按照字母排序转换)。

encode 命令案例:

. * 数据基本情况
. webuse hbp2, clear
. list in 1/10, noobs

+--------------------------------------------------------------+
| id city year age_grp race hbp sex |
|--------------------------------------------------------------|
| 8008238923 1 1993 15–19 Black No female |
| 8007143470 1 1992 30–34 . No |
| 8000468015 1 1988 25–29 Black No male |
| 8006167153 1 1991 25–29 Black No male |
| 8006142590 1 1991 20–24 Black No female |
|--------------------------------------------------------------|
| 8007340259 2 1993 30–34 Black No female |
| 8004411604 1 1990 20–24 Black No male |
| 8006962950 5 1992 25–29 Black No female |
| 8005012348 5 1991 20–24 Black Yes female |
| 8003187296 2 1990 25–29 Hispanic No female |
+--------------------------------------------------------------+

. * 查看数据:变量 sex 为字符型变量,包括两个取值,没有值标签
. describe sex
. list sex in 1/10, noobs

. * 基于字符型变量 sex 生成数值型变量 gender,并创建值标签 sexlbl
. encode sex, generate(gender) label(sexlbl)
. describe gender
. label list

sexlbl:
1 female
2 male

2. sencode 命令

sencode 命令可将字符型变量按字母顺序或其他非字母顺序编码为数值型变量。从数值到字符串的映射可以是一对一的 (按字符串第一次出现的顺序编码),也可以是多对一的 (按字符串位置编码,或者按指定的顺序编码)。

sencode 命令安装:

ssc install sencode, replace

encode 命令语法:

sencode varname [if] [in], {generate(newvar) | replace} [label(name) gsort(gsort_list) manyto1]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 (newvar)
  • replace: 数值变量替换字符变量;
  • label(name):按照变量值标签 name 中 “字符串-数值” 的对应关系转换;
  • gsort(gsort_list): 为字符型变量的非缺失值的数字代码分配指定一个通用的排序;
  • manyto1: 指定数值到字符串的映射是多对一的,即每个字符串有多个数字代码,对应该字符串值在数据集中的位置。

encode 命令案例:

. webuse hbp2, clear
. sencode sex , gene(gender1) // 一对一转换
. sencode sex , gene(gender2) many // 一对多转换
. lab list gender1 gender2

gender1:
1 female
2 male
gender2:
1 female
2 male
3 male
4 female
5 female
6 male
...
1126 male
1127 female
1128 female

. sysuse auto.dta, clear
. sencode make, gene(makeseq1) // 默认按照字母排序
. sencode make, gene(makeseq2) gsort(-foreign) // 先按 foreign 降序,再按字母排序
. list make foreign makeseq1 makeseq2 in 1/10, nolab

+-----------------------------------------------+
| make foreign makeseq1 makeseq2 |
|-----------------------------------------------|
1. | AMC Concord 0 1 23 |
2. | AMC Pacer 0 2 24 |
3. | AMC Spirit 0 3 25 |
4. | Buick Century 0 4 26 |
5. | Buick Electra 0 5 27 |
|-----------------------------------------------|
6. | Buick LeSabre 0 6 28 |
7. | Buick Opel 0 7 29 |
8. | Buick Regal 0 8 30 |
9. | Buick Riviera 0 9 31 |
10. | Buick Skylark 0 10 32 |
+-----------------------------------------------+

3. encoder 命令和 encoderall 命令

encoder 命令可以将字符型变量转换为数值型变量。encoder 命令与 encode 命令具有以下差别:encoder 命令包括 replace 选项替换现有变量;encoder 命令可以设置编码值从 0 开始。encoderall 命令可以一次性批量转换多个字符型变量,并替换原有字符型变量。

encoder 命令安装:

ssc install elabel, replace
ssc install encoder, replace

encoder 命令语法:

encoder varname [if] [in] , [generate(newvar) label(name) noextend replace setzero]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 newvar
  • label(name):按照变量值标签 name 中的 “字符串-数字” 的对应关系转换;
  • noextend: 指定如果分类/标识符变量的值未出现在 label(name) 中,则不被编码;
  • replace: 指定输出的数值变量替换输入的字符型变量;
  • setzero: 指定排序后的值应该从 0 始,如未指定则编码值将从 1 开始。

encoderall 命令语法:

encoderall [varlist] [if] [in] , [label(name) noextend noextendall setzero]
  • label(name):按照变量值标签 name 中的 “字符串-数字” 的对应关系转换;
  • noextend: 指定如果分类/标识符变量的值未出现在 label(name) 中,则不被编码;
  • noextendall: 表示所有变量都使用现有标签进行编码;
  • setzero: 指定排序后的值应该从 0 开始,如未指定则编码值将从 1 开始。

encoder 命令案例:

. * 先看一下数据基本情况
. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. list in 1/5, noobs

+-----------------------------------------------+
| id gender race schtyp read science |
|-----------------------------------------------|
| 70 m 1 pub 45 47 |
| 121 f 1 pub 68 63 |
| 86 m 1 pub 44 58 |
| 141 m 1 pub 63 53 |
| 172 m 1 pub 47 53 |
+-----------------------------------------------+

. * 将字符型变量 gender 转换为数值型变量,并添加值标签sexlbl
. encoder gender, replace label(sexlbl)
. label list sexlbl
sexlbl:
1 f
2 m

. * 将字符型变量 gender 转换为数值型变量,且编码表示为 0-1
. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. encoder gender, replace setzero
. label list gender
gender:
0 f
1 m

encoderall 命令案例:

. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. encoderall, setzero
. label list
science:
1 . //此处未显示编码为 0 的变量值,因为字符型变量 science 中有缺失值
2 31
3 39
4 47
...
read:
0 34
1 42
2 44
3 45
4 47
...
schtyp:
0 pri
1 pub

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 标签 转换, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:Stata入门
    • Stata:快速转换工作路径
    • Stata-dofile-转换-PDF-制作讲义方法
  • 专题:Stata教程
    • Stata小白系列之三:数据标签与排序
  • 专题:Stata命令
    • Stata新命令:readWind-快速读入并转换万德数据
    • Stata新命令-tobalance:非平行面板转换为平行面板数据
  • 专题:数据处理
    • Stata:时间序列数据转换-tstransform
    • Stata数据处理:一月有几周?月度和周数据转换
    • Stata 数据标签和合并
    • Stata 日期格式转换
    • Stata:文字型日期格式的转换
    • Stata数据处理:字符型日期变量的转换
    • Stata数据处理:物价指数-(CPI)-的导入和转换
    • Stata:elabel命令-强大的标签管理工具
    • Stata中文乱码转码顽疾解决方法-批量转换

课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存